/* @Description:midway-back/src/utilsu-array.ts @author:378237242@qq.com @date:2023/11/20 */

/**
 * 用于查找两个数组中相同的元素
 * @param a
 * @param b
 */
const findCommonElement = function <T>(a: T[], b: T[]) {
  // 将数组a转换为Set集合
  const setA = new Set(a);
  // 遍历数组b
  for (let i = 0, length = b.length; i < length; i++) {
    // 获取数组b中的每一个元素
    const element = b[i];
    // 如果集合setA中包含元素b，则返回该元素b在数组a中的索引
    if (setA.has(element)) {
      // 获取数组a中元素b的索引
      const indexInA = a.indexOf(element);
      // 返回元素b在数组a中的索引
      return { element, indexInB: i, indexInA };
    }
  }
  // 如果没有找到，则返回false
  return false;
};

/**
 * 判断words数组中是否包含Keywords数组中的元素
 * @param Keywords
 * @param words
 */
const hasCommonElements = function <T>(Keywords: Array<T>, words: Array<T>) {
  return words.some(element => Keywords.includes(element));
};

/**
 * 函数hasFalse接收一个布尔数组，判断数组中是否有false
 * @param arrayOfBoolean
 */
const hasFalse = function (arrayOfBoolean: boolean[]) {
  // const allTrue = arrayOfFunctions.every((func) => func());
  // 判断数组中是否有false
  const hasFalse = arrayOfBoolean.some(boolean => boolean === false);
  // 返回布尔值
  return hasFalse;
};

export { hasCommonElements, findCommonElement, hasFalse };
